feat: add auth password-login, pull, and push commands#422
feat: add auth password-login, pull, and push commands#422moranshe-max wants to merge 4 commits intomainfrom
Conversation
🚀 Package Preview Available!Install this PR's preview build with npm: npm i @base44-preview/cli@0.0.47-pr.422.e7d50a7Prefer not to change any import paths? Install using npm alias so your code still imports npm i "base44@npm:@base44-preview/cli@0.0.47-pr.422.e7d50a7"Or add it to your {
"dependencies": {
"base44": "npm:@base44-preview/cli@0.0.47-pr.422.e7d50a7"
}
}
Preview published to npm registry — try new features instantly! |
53d8672 to
60fd351
Compare
Add `base44 auth password-login` command for enabling/disabling username & password authentication. Introduces the `auth` command group and the core `auth-config` module with Zod schemas, API client, and camelCase transforms. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove interactive prompts in favor of explicit --enable and --disable flags. Add comprehensive input validation with agent-friendly error hints. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Migrate auth-config from standalone core module to the unified resources pattern. Add `auth pull` and `auth push` CLI commands for syncing auth configuration. Extend project config and deploy to support auth-config as a deployable resource. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
837aaa9 to
3cd3e7a
Compare
Replace removed runCommand/RunCommandResult imports with Base44Command and import RunCommandResult from @/cli/types.js to match the new command pattern introduced on main. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
| /** | ||
| * Returns true if at least one login method is enabled in the given config. | ||
| */ | ||
| export function hasAnyLoginMethod(config: AuthConfig): boolean { |
There was a problem hiding this comment.
I think this should be in config / schema or somewhere else because it's not really API.ts file
|
|
||
| let response: KyResponse; | ||
| try { | ||
| response = await base44Client.get(`api/apps/${id}`); |
There was a problem hiding this comment.
I wonder if this should really big in project/api.ts file since it's the entire project data.. but maybe it's a future refactor
| * Reads the auth config file from the given directory. | ||
| * Returns [config] if the file exists, or [] if the directory or file doesn't exist. | ||
| */ | ||
| export async function readAuthConfig(authDir: string): Promise<AuthConfig[]> { |
There was a problem hiding this comment.
why are we returning an array of AuthConfig instead just the AuthConfig? is it possible to have multiple AuthConfigs? 🤔
| export async function updateAuthConfigFile( | ||
| authDir: string, | ||
| updates: Partial<AuthConfig>, | ||
| ): Promise<AuthConfig> { |
There was a problem hiding this comment.
I wonder if we need a read / write / update functions, maybe just read and write? write will also do updates or updates will happen before calling the config.ts?
| return; | ||
| } | ||
|
|
||
| await pushAuthConfigToApi(configs[0]); |
There was a problem hiding this comment.
I commented it in the config.ts file, can AuthConfig be just singular and not an array? then we don't need to keep putting into an array and out of an array 💪
| .option("--enable", "Enable password authentication") | ||
| .option("--disable", "Disable password authentication") |
There was a problem hiding this comment.
what do you think about using commander's .choices instead of 2 different flags? and then the command will look like base44 auth password-login enable
// something like
.argument('<state>').choices(['enable', 'disable'])
| const authDir = join(configDir, project.authDir); | ||
|
|
||
| const updated = await runTask( | ||
| `${shouldEnable ? "Enabling" : "Disabling"} username & password authentication`, |
There was a problem hiding this comment.
maybe the message should be something like "Updating authenticaiton configuration" or something? so make sure it's only locally
There was a problem hiding this comment.
i just saw the outro message, so maybe it's fine
| return await updateAuthConfigFile(authDir, { | ||
| enableUsernamePassword: shouldEnable, | ||
| }); |
There was a problem hiding this comment.
I also commented baout this inside the updateAuthConfigFile function, i just feel writeAuthConfigFile can do everything?
|
|
||
| export function getAuthPullCommand(): Command { | ||
| return new Base44Command("pull") | ||
| .description("Pull auth config from Base44 to local file") |
There was a problem hiding this comment.
Might worth adding some text about overwriting existing file
|
|
||
| export function getAuthPushCommand(): Command { | ||
| return new Base44Command("push") | ||
| .description("Push local auth config to Base44") |
There was a problem hiding this comment.
product question -
- I saw you added a warning in "password-login" command about that users will be locked out.. maybe we should do it here too?
- I know it's currently confusing in the CLI, but do we want to confirm this with the user first? (and add a --yes flag or --force or something?)
kfirstri
left a comment
There was a problem hiding this comment.
Good work 💪, Added some comments
Note
Description
This PR introduces a new
authcommand group for managing app authentication settings from the CLI. It addsauth password-login(with--enable/--disableflags),auth pull(fetch remote auth config to local file), andauth push(sync local auth config to Base44). Thedeploycommand is also updated to push auth config automatically as part of deployment.Related Issue
None
Type of Change
Changes Made
packages/cli/src/cli/commands/auth/withindex.ts,password-login.ts,pull.ts, andpush.tscommandspackages/cli/src/core/resources/auth-config/resource module with API client, config file management, schema (Zod), and resource interfaceauthcommand inprogram.tsconfig.ts,schema.ts,types.ts) to includeauthDirand load auth config duringreadProjectConfig()deploycommand to push auth config to Base44 as part of the deployment flowauth password-login --enable/--disablenon-interactive flag-based API (no interactive prompts)auth_password_setup.spec.ts) and core unit tests (auth-password.spec.ts)Testing
npm test)Checklist
docs/(AGENTS.md) if I made architectural changesAdditional Notes
The
auth-configresource follows the establishedResource<T>pattern with separatepull.tsandpush.tsmodules, consistent with the existing resource architecture. Auth config is stored locally in the project'sauthDirand synced to/from the Base44 API.🤖 Generated by Claude | 2026-03-22 00:00 UTC